package com.itextpdf.text.xml.xmp;
import com.itextpdf.testutils.CompareTool;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.*;
import com.itextpdf.xmp.XMPException;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
public class XmpWriterTest {
public static final String OUT_FOLDER = "./target/com/itextpdf/text/xml/xmp/";
public static final String CMP_FOLDER = "./src/test/resources/com/itextpdf/text/xml/xmp/";
@Before
public void init() {
new File(OUT_FOLDER).mkdirs();
}
@Test
public void createPdfTest() throws IOException, DocumentException, XMPException {
String fileName = "xmp_metadata.pdf";
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(OUT_FOLDER + fileName));
ByteArrayOutputStream os = new ByteArrayOutputStream();
XmpWriter xmp = new XmpWriter(os);
DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Hello World");
DublinCoreProperties.addSubject(xmp.getXmpMeta(), "XMP & Metadata");
DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Metadata");
PdfProperties.setKeywords(xmp.getXmpMeta(), "Hello World, XMP & Metadata, Metadata");
PdfProperties.setVersion(xmp.getXmpMeta(), "1.4");
xmp.close();
writer.setXmpMetadata(os.toByteArray());
// step 3
document.open();
// step 4
document.add(new Paragraph("Hello World"));
// step 5
document.close();
CompareTool ct = new CompareTool();
Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + fileName, true));
}
@Test
public void createPdfAutomaticTest() throws IOException, DocumentException {
String fileName = "xmp_metadata_automatic.pdf";
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(OUT_FOLDER + fileName));
document.addTitle("Hello World example");
document.addSubject("This example shows how to add metadata & XMP");
document.addKeywords("Metadata, iText, step 3");
document.addCreator("My program using 'iText'");
document.addAuthor("Bruno Lowagie & Paulo Soares");
writer.createXmpMetadata();
// step 3
document.open();
// step 4
document.add(new Paragraph("Hello World"));
// step 5
document.close();
CompareTool ct = new CompareTool();
Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + fileName, true));
}
@Test
public void manipulatePdfTest() throws IOException, DocumentException {
String fileName = "xmp_metadata_added.pdf";
PdfReader reader = new PdfReader(CMP_FOLDER + "pdf_metadata.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(OUT_FOLDER + fileName));
HashMap<String, String> info = reader.getInfo();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XmpWriter xmp = new XmpWriter(baos, info);
xmp.close();
stamper.setXmpMetadata(baos.toByteArray());
stamper.close();
reader.close();
CompareTool ct = new CompareTool();
Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + fileName, true));
}
@Test
public void manipulatePdf2Test() throws IOException, DocumentException, XMPException {
String fileName = "xmp_metadata_added2.pdf";
PdfReader reader = new PdfReader(CMP_FOLDER + "pdf_metadata.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(OUT_FOLDER + fileName));
stamper.createXmpMetadata();
XmpWriter xmp = stamper.getXmpWriter();
DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Hello World");
DublinCoreProperties.addSubject(xmp.getXmpMeta(), "XMP & Metadata");
DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Metadata");
PdfProperties.setVersion(xmp.getXmpMeta(), "1.4");
stamper.close();
reader.close();
CompareTool ct = new CompareTool();
Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + fileName, true));
}
@Test
public void deprecatedLogicTest() throws IOException, DocumentException {
String fileName = "xmp_metadata_deprecated.pdf";
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(OUT_FOLDER + fileName));
ByteArrayOutputStream os = new ByteArrayOutputStream();
XmpWriter xmp = new XmpWriter(os);
XmpSchema dc = new com.itextpdf.text.xml.xmp.DublinCoreSchema();
XmpArray subject = new XmpArray(XmpArray.UNORDERED);
subject.add("Hello World");
subject.add("XMP & Metadata");
subject.add("Metadata");
dc.setProperty(DublinCoreSchema.SUBJECT, subject);
xmp.addRdfDescription(dc.getXmlns(), dc.toString());
PdfSchema pdf = new PdfSchema();
pdf.setProperty(PdfSchema.KEYWORDS, "Hello World, XMP & Metadata, Metadata");
pdf.setProperty(PdfSchema.VERSION, "1.4");
xmp.addRdfDescription(pdf);
xmp.close();
writer.setXmpMetadata(os.toByteArray());
// step 3
document.open();
// step 4
document.add(new Paragraph("Hello World"));
// step 5
document.close();
CompareTool ct = new CompareTool();
Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + "xmp_metadata.pdf", true));
}
}